package com.kexio.enterprise.observability.logging;

import com.kexio.enterprise.integration.common.PageResult;
import com.kexio.enterprise.observability.logging.domain.OperateLogEntry;
import com.kexio.enterprise.observability.logging.query.LogQueryCriteria;
import com.kexio.enterprise.observability.logging.statistics.LogStatistics;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 日志服务接口
 * 
 * 提供操作日志的记录、查询和管理功能
 * 
 * @author Kexio
 * @since 1.0.0
 */
public interface LogService {

    /**
     * 记录操作日志
     * 
     * @param logEntry 日志条目
     */
    void log(OperateLogEntry logEntry);

    /**
     * 异步记录操作日志
     * 
     * @param logEntry 日志条目
     */
    void logAsync(OperateLogEntry logEntry);

    /**
     * 批量记录操作日志
     * 
     * @param logEntries 日志条目列表
     */
    void batchLog(List<OperateLogEntry> logEntries);

    /**
     * 查询操作日志
     * 
     * @param criteria 查询条件
     * @return 日志列表
     */
    List<OperateLogEntry> queryLogs(LogQueryCriteria criteria);

    /**
     * 分页查询操作日志
     * 
     * @param criteria 查询条件
     * @param page     页码
     * @param size     页大小
     * @return 分页结果
     */
    PageResult<OperateLogEntry> queryLogsWithPage(LogQueryCriteria criteria, int page, int size);

    /**
     * 根据ID查询日志
     * 
     * @param logId 日志ID
     * @return 日志条目
     */
    OperateLogEntry getLogById(Long logId);

    /**
     * 删除指定时间之前的日志
     * 
     * @param beforeTime 截止时间
     * @return 删除的日志数量
     */
    int deleteLogs(LocalDateTime beforeTime);

    /**
     * 清空所有日志
     * 
     * @return 删除的日志数量
     */
    int clearAllLogs();

    /**
     * 获取日志统计信息
     * 
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 统计信息
     */
    LogStatistics getLogStatistics(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 导出日志
     * 
     * @param criteria 查询条件
     * @param format   导出格式 (CSV, EXCEL, JSON)
     * @return 导出文件路径
     */
    String exportLogs(LogQueryCriteria criteria, String format);
}
